#pragma once
#include"iostream"
#include"list"
using namespace std;
#define delete_safe(x) {if(x!=NULL){delete x ; x = NULL;}}
#define SIZE_NAME_ADN  49
#define DENGUEVIRUS 1
#define FLUVIRUS 2
#define VIRUS 3


class Virus 
{
public:
        char* m_dna;
public:
        int m_resistance;
        

	public:
        Virus();
		Virus(const Virus &virus);//Copy constructor
		virtual int GetType() = 0;
		virtual ~Virus();
        char* GetName();

        void SetDNA(char* m_dna);
		void InitResistance();//call in contructor of derive class
        
		void ReduceResistance(int medicineResistance);//will be die if m_resistance <= 0;
		void LoadDNAInformation();

		virtual void DoBorn()=0;//call in contructor in derive class
		virtual list<Virus*> DoClone() const = 0;//return new virus;
		virtual void DoDie()=0;//Call in Destructor;
		
		
};
